package tt.Lematizador.Diccionario;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.regex.*;
/*
import javax.servlet.ServletContext;

import org.apache.struts2.util.ServletContextAware;
import org.springframework.context.ApplicationContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;*/
import tt.Lematizador.Lexemas.Lexema;
//import mx.ipn.escom.cdt.bi.modelo.Imagen;
import tt.Lematizador.Diccionario.PalaSinonimos;
import tt.Lematizador.Diccionario.Sinonimo;
import tt.Lematizador.Lexemas.Lematizador;

import tt.Lematizador.Filtro.FiltroArtPron;
import tt.Lematizador.Diccionario.Sinonimizador;


public class Diccionario {
	Lexema uno;
	Sinonimo dos;
	String absolutePath;

	public Diccionario(String absolutePath){


		//String absolute = context.getRealPath("/");
		this.absolutePath = absolutePath;

		// 		uno = new Lexema(absolute +"Diccionarios/generate.txt");
		// 		dos = new Sinonimo(absolute +"Diccionarios/DiccionarioCompleto.dat");
		uno = new Lexema(absolutePath+"Diccionarios/generate.txt", absolutePath+"Diccionarios/generateArchIndice.txt");
		dos = new Sinonimo(absolutePath+"Diccionarios/DiccionarioCompleto.dat", absolutePath+"Diccionarios/DiccionarioCompletoArchIndice.dat");

	}
	public List<String> getSinonimos(List<String> listobjetos)
	{
		//		System.out.println("----getSinonimos--"+listobjetos.size());
		List<PalaSinonimos> psinonimos = new ArrayList<PalaSinonimos>();
		List<String> aux = new ArrayList<String>();
		List<String> sinonimos = new ArrayList<String>();
		StringTokenizer token;
		int x=0;
		for(String i: listobjetos)
		{
			token = new StringTokenizer(i," ");
			if(token.countTokens()>1)
				sinonimos.add(i);
			else
			{
				psinonimos = (new Sinonimizador()).Sinonimizar(i,dos);
				for(PalaSinonimos j:psinonimos){
					aux=j.getSinonimos();
					//	System.out.println("in--"+j.toString());
					if(aux.size()>5){
						for(int z=0 ; z<5 ; z++){
							sinonimos.add(aux.get(z));
						}
					}
					else 
						for(String k: aux){
							sinonimos.add(k);	
						}

				}
			}
			/*System.out.println("-------------------------------------------");
	    	while(x<sinonimos.size()){	    		
				System.out.println(sinonimos.get(x));
				x++;
	    	}*/

		}
		return sinonimos;
	}

	public List<String> getSinonimos2(String cadena)
	{
		//		System.out.println("----getSinonimos--"+listobjetos.size());
		List<PalaSinonimos> psinonimos = new ArrayList<PalaSinonimos>();
		List<String> aux = new ArrayList<String>();
		List<String> sinonimos = new ArrayList<String>();
		StringTokenizer token = new StringTokenizer(cadena, " ");
		int x=0;
		if(token.countTokens()>1)
			sinonimos.add(cadena);
		else
		{
			psinonimos = (new Sinonimizador()).Sinonimizar(cadena,dos);
			for(PalaSinonimos j:psinonimos){
				aux=j.getSinonimos();
				sinonimos.add(j.getPalabra());
				if(aux.size()>5){
					for(int z=0 ; z<5 ; z++){
						sinonimos.add(aux.get(z));
					}
				}
				else 
					for(String k: aux){
						sinonimos.add(k);	
					}
			}
		}
		/*System.out.println("-------------------------------------------");
    	while(x<sinonimos.size()){	    		
			System.out.println(sinonimos.get(x));
			x++;
    	}*/

		return sinonimos;
	}





	public List<String> getSinonimos3(String cadena)
	{
		List<PalaSinonimos> psinonimos = new ArrayList<PalaSinonimos>();
		List<String> aux = new ArrayList<String>();
		List<String> sinonimos = new ArrayList<String>();
		int x=0;

		//if (Character.isLetter(cadena.charAt(0))){
		
			String j=(new Lematizador()).Lematizar((new FiltroArtPron()).Filtrar(cadena, absolutePath),uno);
			psinonimos = (new Sinonimizador()).Sinonimizar(j,dos);
			for(PalaSinonimos i:psinonimos){
				aux=i.getSinonimos();
				sinonimos.add(i.getPalabra());
				if(aux.size()>5){
					for(int z=0 ; z<5 ; z++){
						sinonimos.add(aux.get(z));
					}
				}
				else 
					for(String k: aux){
						sinonimos.add(k);	
					}

			}	
		/*System.out.println("--------------------otro-----------------------");
    	while(x<sinonimos.size()){	    		
			System.out.println(sinonimos.get(x));
			x++;
    	}*/
		//}
		return sinonimos;
	}

	//función que se aplica en busqueda simple la cual distingue si hay frace dentro de comillas y la introduce dentro de la lista sin sinonimos y si hay mas palabras solas 
	//busca sus sinonimos y los pone dentro de la lista para poder hacer la busqueda. 
	public List<String> getSinonimos4(String cadena)
	{
		List<PalaSinonimos> psinonimos = new ArrayList<PalaSinonimos>();
		List<String> aux = new ArrayList<String>();
		List<String> sinonimos = new ArrayList<String>();
		String comillas=null;
		List<String> comillas2=new ArrayList<String>();
		int x=0;
		int q=0;
	
		Pattern p = Pattern.compile("\"[^\"]*\"");
		Matcher m = p.matcher(cadena);
       
		while(m.find()){
			comillas=m.group();									         //obtengo la frase que se encuentra dentro de las comillas dobles			
//			System.out.println("---------------comillas-----"+comillas);
			comillas2.add(comillas.replace("\"", ""));                   //agrego las palabras dentro de un list array y le quito las comillas dobles 
//			System.out.println("---------------comillas2-----"+comillas2);
			cadena=cadena.replaceAll(comillas,"");
//			System.out.println("----------cadena2-----"+cadena);
			q++;
		}		
	

		String j=(new Lematizador()).Lematizar((new FiltroArtPron()).Filtrar(cadena, absolutePath),uno);
		psinonimos = (new Sinonimizador()).Sinonimizar(j,dos);
		for (int g=0; g<comillas2.size() ;g++){
			sinonimos.add(comillas2.get(g));
		}
		for(PalaSinonimos i:psinonimos){
			aux=i.getSinonimos();
			sinonimos.add(i.getPalabra());
			if(aux.size()>5){
				for(int z=0 ; z<5 ; z++){
					sinonimos.add(aux.get(z));
				}
			}
			else 
				for(String k: aux){
					sinonimos.add(k);	
				}

		}	
		/*System.out.println("--------------------otro-----------------------");
    	while(x<sinonimos.size()){	    		
			System.out.println(sinonimos.get(x));
			x++;
    	}*/
		return sinonimos;
	}

}
